Middleware হলো ASP.NET Core অ্যাপ্লিকেশনের একটি গুরুত্বপূর্ণ অংশ, যা HTTP রিকোয়েস্ট এবং রেসপন্স প্রসেসের মধ্যে কোনো একটি অতিরিক্ত কার্যক্রম সম্পাদন করে। Custom Middleware তৈরি করা মানে হলো আপনি আপনার প্রয়োজন অনুযায়ী একটি নতুন middleware কম্পোনেন্ট তৈরি করবেন যা রিকোয়েস্ট এবং রেসপন্স সাইকেলে নিজস্ব লজিক বা কার্যক্রম যোগ করবে।
ASP.NET Core অ্যাপ্লিকেশন ডেভেলপ করার সময় প্রাথমিকভাবে বেশ কিছু বিল্ট-ইন Middleware পাওয়া যায়, যেমন Authentication, Authorization, Caching ইত্যাদি। কিন্তু অনেক সময় কিছু বিশেষ কার্যক্রম সম্পাদনের জন্য কাস্টম Middleware তৈরি করতে হতে পারে।
প্রথমে একটি ক্লাস তৈরি করতে হবে যা IMiddleware ইন্টারফেস বা RequestDelegate ব্যবহার করবে।
public class CustomMiddleware
{
private readonly RequestDelegate _next;
public CustomMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
// Middleware এর শুরুতে কিছু কার্যক্রম করা
Console.WriteLine("Request started");
// রিকোয়েস্ট পরবর্তী Middleware বা রেসপন্স প্রসেসে পাস করা
await _next(context);
// Middleware এর শেষে কিছু কার্যক্রম করা
Console.WriteLine("Response completed");
}
}
এই কোডে, RequestDelegate
হলো পরবর্তী Middleware অথবা রেসপন্স হ্যান্ডলারকে কল করার জন্য ব্যবহার করা হয়। InvokeAsync
মেথডে আপনি আপনার কার্যক্রম যোগ করতে পারেন। এখানে আমরা কেবল রিকোয়েস্ট স্টার্ট এবং রেসপন্স কমপ্লিট হওয়ার সময় কনসোলে মেসেজ লিখেছি।
আপনার কাস্টম Middleware অ্যাপ্লিকেশনে ব্যবহারের জন্য Startup.cs (বা Program.cs যদি .NET 6+ ব্যবহার করেন) ফাইলে রেজিস্টার করতে হবে। এখানে Configure
মেথডে UseMiddleware
মেথড ব্যবহার করে Middleware রেজিস্টার করা হয়।
public class Startup
{
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// কাস্টম Middleware রেজিস্টার করা
app.UseMiddleware<CustomMiddleware>();
// অন্য বিল্ট-ইন Middleware গুলি
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapGet("/", async context =>
{
await context.Response.WriteAsync("Hello, world!");
});
});
}
}
এখানে UseMiddleware<CustomMiddleware>()
ব্যবহার করে আমাদের কাস্টম Middleware অ্যাপ্লিকেশনে যুক্ত করা হয়েছে। এর মানে হলো, যখন একটি HTTP রিকোয়েস্ট আসবে, তখন সেই রিকোয়েস্ট প্রথমে CustomMiddleware দিয়ে যাবে এবং তারপর অন্যান্য Middleware ও হ্যান্ডলারগুলো কাজ করবে।
কাস্টম Middleware তৈরি করতে গিয়ে আপনি বিভিন্ন ধরনের কাজ করতে পারেন, যেমন:
ASP.NET Core অ্যাপ্লিকেশনে Middleware গুলি চেইন আকারে একে অপরের সঙ্গে যুক্ত থাকে। একটি Middleware পরবর্তী Middleware কে কল করার মাধ্যমে পুরো HTTP রিকোয়েস্ট প্রসেস সম্পন্ন হয়।
ধরা যাক, আপনি যদি একটি কাস্টম Middleware তৈরি করতে চান যা রিকোয়েস্টের হেডার চেক করে দেখবে যে, "X-Api-Key" নামক একটি হেডার আছে কিনা, এবং যদি না থাকে তবে 401 Unauthorized রেসপন্স ফিরিয়ে দেবে।
public class ApiKeyMiddleware
{
private readonly RequestDelegate _next;
public ApiKeyMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context)
{
if (!context.Request.Headers.ContainsKey("X-Api-Key"))
{
context.Response.StatusCode = StatusCodes.Status401Unauthorized;
await context.Response.WriteAsync("API Key is missing");
return;
}
// API Key রয়েছে, পরবর্তী Middleware এ পাস করা
await _next(context);
}
}
এখন, এই Middleware কে Startup.cs
-এ রেজিস্টার করলে, আপনি যে কোনো HTTP রিকোয়েস্টে X-Api-Key
হেডার না থাকলে 401 Unauthorized রেসপন্স পাবেন।
Custom Middleware তৈরি করা ASP.NET Core অ্যাপ্লিকেশনের একটি শক্তিশালী বৈশিষ্ট্য, যা আপনাকে অ্যাপ্লিকেশনের HTTP রিকোয়েস্ট প্রসেসে নিজের প্রয়োজনীয় কার্যক্রম যোগ করার সুযোগ দেয়। Middleware তৈরি এবং কনফিগার করার মাধ্যমে আপনি অ্যাপ্লিকেশনের সিকিউরিটি, লগিং, এবং কাস্টম কাজগুলো সম্পন্ন করতে পারেন। Middleware গুলোর সঠিক অর্ডার এবং কার্যক্রম নিশ্চিত করা গুরুত্বপূর্ণ যাতে অ্যাপ্লিকেশন সঠিকভাবে কাজ করে।
common.read_more